#ifndef _VECTOR2F_H_
#define _VECTOR2F_H_

/* 
 * Vector2f
 *
 * Basic 2D vector quantity
 */

#include <ostream>
#include <math.h>

namespace bt
{
	class Vector2f
	{
	public:
		// Constructors
		Vector2f();
		
		Vector2f(const Vector2f& rhs);	// Copy constructor
		
		Vector2f(float x, float y);
		
		virtual ~Vector2f();
		
		// Assignment operators
		Vector2f& operator=(const Vector2f& rhs);
		
		Vector2f& operator+=(const Vector2f& rhs);
			
		Vector2f& operator-=(const Vector2f& rhs);
		
		Vector2f& operator*=(const float& rhs);
		
		// Comparison Operators
		bool operator==(const Vector2f& rhs);
		
		bool operator!=(const Vector2f& rhs);
		
		// Binary Operators
		const Vector2f operator+(const Vector2f& rhs);
		
		const Vector2f operator-(const Vector2f& rhs);
		
		const Vector2f operator*(const float& rhs);
		
		friend const Vector2f operator*(const float& lhs, Vector2f& rhs);
		
		const float dot(const Vector2f& rhs);
		
		const Vector2f proj(Vector2f& rhs); // Project this onto vector rhs
		
		friend std::ostream& operator<<(std::ostream& os, const Vector2f& rhs);
		
		// Member Functions
		const float length();
		
		// Member Variables
		float x, y;
	};
}

#endif /* _VECTOR2F_H_ */
